package cn.e2win.base.dao;

import java.io.Serializable;
import java.sql.SQLException;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import cn.e2win.base.json.vo.Pager;


public interface GenericDAO<T, PK extends Serializable> {
	T read(PK id);

	List<T> read(PK[] ids);

	List<T> readAll();
	
	void store(T object);
	
	void storeAll(List<T>  list);
	
	void update(T object);
	
	void delete(PK id);

	void delete(PK[] ids);

	void delete(T persistentObject);

	void delete(Collection<T> persistentObjects);

	T findUniqueBy(String name, Object value);

	T findUniqueBy(String[] params, Object[] args);

	List<T> findBy(String name, Object value);

	List<T> findBy(String[] params, Object[] args);

	List<T> findByLike(String name, String value);

	List listedQuery(String queryString, Object[] args);
	
	Map<String, Object> firstRecord(String sql, Map<String, ?> paramMap);
	
	List<Map<String, Object>> listedSql(String sql, Map<String, ?> map);
	
	void processPager(Pager pager)throws SQLException;
	
	int updateNative(String sql, Map<String, Object> args);

	String getSeq(String formType);

	Object getEntity(Class clazz, Serializable id);

	Object merge(Object o);

	List<Map<String, Object>> getListBySqlAutoParam(String sql,
			Map<String, ?> map);
}
